package collections;

import java.util.*;

class List_ArrayListTest {
    public static void printElements(Collection<?> c) {
        Iterator<?> it = c.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }


    /**
     *
     * @Title: main
     * @Description: ArrayList 和 LinkedList只有三种遍历方式：1. for循环 2. 迭代器遍历 3. 转换成数组再遍历数组。
     *                                                      (但是  for循环有两种写法，一是普通，二是增强for)
     *
     * @param args
     */
    @SuppressWarnings("unchecked")
    public static void main(String[] args) {
        //三种遍历ArrayList的方法。
        ArrayList<String> al = new ArrayList<String>();
        al.add("QQ");
        al.add("Weixin");
        al.add("MoMo");
        System.out.println("直接输出：" + al);
//        Collections中的奇葩方法。
//        Collections.reverse(al);
//        System.out.println("最大值： " + Collections.min(al));
        for (int i = 0; i < al.size(); i++) {
            System.out.println("for循环遍历ArrayList 1：" + al.get(i));
        }
        //两种for循环遍历的区别是：一个是直接for循环遍历，
        //                       另一个是先转换成数组再遍历数组。
        Object[] objs = al.toArray();
        for (int i = 0; i < objs.length; i++) {
            System.out.println("for循环遍历ArrayList 2：" + objs[i]);
        }

        for (String object : al) {
            System.out.println("增强for循环遍历ArrayList 1：" + object);
        }

        Iterator<String> it = al.iterator();
        while (it.hasNext()) {
            System.out.println("迭代器遍历ArrayList ：" + it.next());
        }


        //这是一个迭代器遍历的例子。
        Student s1 = new Student(2, "zhangsan");
        Student s2 = new Student(1, "First");
        Student s3 = new Student(3, "wangwu");
        Student s4 = new Student(2, "mybole");
        ArrayList<Student> al2 = new ArrayList<Student>();
        al2.add(s1);
        al2.add(s2);
        al2.add(s3);
        al2.add(s4);
        //排序
//        Collections.sort(al2, Collections.reverseOrder());
        Collections.sort(al2);
        printElements(al2);
    }
}
